package com.leetcode.leetcode.anyan;

public class _剑指Offer05替换空格 {
    /**
     * 请实现一个函数，把字符串 s 中的每个空格替换成"%20"。
     *
     * 示例 1：
     * 输入：s = "We are happy."
     * 输出："We%20are%20happy."
     *  
     * 限制：
     * 0 <= s 的长度 <= 10000
     *
     * 来源：力扣（LeetCode）
     * 链接：https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof
     * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
     */
    public static String replaceSpace(String s) {
        /**
         * 好像避免不了去遍历每个字符，所以直接使用暴力算法
         *
         将空格替换为%20，意味着一个字符替换为3个，所以需要扩容
         不考虑空间成本，直接将数组长度扩大3倍
         */
        char[] c = s.toCharArray();
        char[] newChar = new char[c.length * 3];
        int j = 0;
        int k = 0;
        for (int i = 0; i < c.length; i++) {
            if (c[i] == ' ') {
                newChar[j++] = '%';
                newChar[j++] = '2';
                newChar[j++] = '0';
            } else {
                newChar[j++] = c[i];
            }
            k = j;
        }
        /**
         * 如果不借用 k ，在LeetCode里面执行结果是：
         * "We%20are%20happy.\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"
         */
        return new String(newChar, 0, k);
    }

    public static void main(String[] args) {
        String s = replaceSpace("We are happy.");
        System.out.println(s);
    }
}
